} );
};
- /**
- * Check whether the default values of the filters are all false.
- *
- * @return {boolean} Default filters are all false
- */
- mw.rcfilters.dm.FiltersViewModel.prototype.areDefaultFiltersEmpty = function () {
- var defaultFilters;
-
- if ( this.defaultFiltersEmpty === null ) {
- // We only need to do this test once,
- // because defaults are set once per session
- defaultFilters = this.getFiltersFromParameters( this.getDefaultParams() );
- this.defaultFiltersEmpty = $.isEmptyObject( defaultFilters ) || Object.keys( defaultFilters ).every( function ( filterName ) {
- return !defaultFilters[ filterName ];
- } );
- }
-
- return this.defaultFiltersEmpty;
- };
-
/**
* Get the item that matches the given name
*
* An item has changed
*/
+ /**
+ * @event default
+ * @param {string} New default ID
+ *
+ * The default has changed
+ */
+
/* Methods */
/**
this.getItems().forEach( function ( item ) {
item.toggleDefault( item.getID() === itemID );
} );
+
+ this.emit( 'default', itemID );
}
};
this.updateChangesList();
};
+ /**
+ * Check whether the default values of the filters are all false.
+ *
+ * @return {boolean} Defaults are all false
+ */
+ mw.rcfilters.Controller.prototype.areDefaultsEmpty = function () {
+ var defaultFilters = this.filtersModel.getFiltersFromParameters( this._getDefaultParams() );
+
+ this._deleteExcludedValuesFromFilterState( defaultFilters );
+
+ // Defaults can change in a session, so we need to do this every time
+ return Object.keys( defaultFilters ).every( function ( filterName ) {
+ return !defaultFilters[ filterName ];
+ } );
+ };
+
/**
* Empty all selected filters
*/
queryHighlights = data.highlights || {};
savedParams = this.filtersModel.getParametersFromFilters(
- // Merge filters with sticky values
$.extend( true, {}, data.filters, this.filtersModel.getStickyFiltersState() )
);
} );
this.queriesModel.connect( this, {
itemUpdate: 'onSavedQueriesItemUpdate',
- initialize: 'onSavedQueriesInitialize'
+ initialize: 'onSavedQueriesInitialize',
+ 'default': 'reevaluateResetRestoreState'
} );
}
* Reevaluate the restore state for the widget between setting to defaults and clearing all filters
*/
mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.reevaluateResetRestoreState = function () {
- var defaultsAreEmpty = this.model.areDefaultFiltersEmpty(),
+ var defaultsAreEmpty = this.controller.areDefaultsEmpty(),
currFiltersAreEmpty = this.model.areCurrentFiltersEmpty(),
hideResetButton = currFiltersAreEmpty && defaultsAreEmpty;
} ),
'Default parameters are stored properly per filter and group'
);
-
- assert.ok(
- !model.areDefaultFiltersEmpty(),
- 'Check if default filters are empty when defaults exist'
- );
-
- // Reset on special filter object that has no defaults
- model = new mw.rcfilters.dm.FiltersViewModel();
- model.initializeFilters(
- [ {
- name: 'group1',
- type: 'send_unselected_if_any',
- filters: [
- { name: 'filter1', label: 'group1filter1-label', description: 'group1filter1-desc' },
- { name: 'filter2', label: 'group1filter2-label', description: 'group1filter2-desc' },
- { name: 'filter3', label: 'group1filter3-label', description: 'group1filter3-desc' }
- ]
- } ]
- );
-
- assert.ok(
- model.areDefaultFiltersEmpty(),
- 'Check if default filters are empty when defaults do not exist'
- );
} );
QUnit.test( 'Finding matching filters', function ( assert ) {